home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1995 October / EnigmA AMIGA RUN 01 (1995)(G.R. Edizioni)(IT)[!][issue 1995-10][Aminet 7].iso / Aminet / comm / bbs / WWBBSDoors.lha / WWBBS / rexxDoors / Number_Guesser.rexx < prev    next >
OS/2 REXX Batch file  |  1995-04-27  |  6KB  |  231 lines

  1. /*            The WORLD FAMOUS ARexx Number Guesser v2.2c
  2.      Written by Charles Johnston of CrazySoft Inc. Prescott,AZ (03-08-93)
  3.             FREELY DISTRIBUTABLE as long as this notice remains
  4.     Comments may be sent to Charles (Sysop) Crazy Train BBS (602)771-8971*/
  5.  
  6. options results
  7.  
  8. CR="0D"x
  9. CALL TIME('R')
  10. SIGNAL ON BREAK_C
  11. SIGNAL ON BREAK_E
  12. CLS=d2c(12)
  13.  
  14.  PARSE arg Username winnings . colorflag  secs .
  15.  
  16. BBSIDENTIFY EMULATION
  17. PARSE VAR RESULT type .
  18. if type = "ANSI" then
  19.   colorflag=1
  20. else
  21.   colorflag=0
  22.  
  23. BBSIDENTIFY USER
  24. PARSE VAR RESULT Username From Acces .
  25. Username = substr(Username,2,length(Username)-2)
  26.  
  27.  IF ~DATATYPE(secs,'N') THEN secs=3600
  28.  def=''
  29.  red=''
  30.  grn=''
  31.  yel=''  /*Turns off ANSI codes but then checks users colorflag below*/
  32.  blu=''
  33.  mag=''
  34.  cyn=''
  35.  wht=''
  36.  
  37.  IF colorflag=1 THEN    /* let's see some color!*/
  38.    DO
  39.      def=''
  40.      red=''
  41.      grn=''
  42.      yel=''
  43.      blu=''
  44.      mag=''
  45.      cyn=''
  46.      wht=''
  47.    END
  48.  
  49. bbspath=GETCLIP('BBS_path')      /*retrieve  bbs path so our prg is generic*/
  50. filename=bbspath'rexxDoors/data/top10'
  51. If ~exists(filename) then
  52. do
  53.  call open('top10',filename,'w')
  54.   do 10
  55.    line = '9 Charles_Johnston'
  56.    call writeln('top10',line)
  57.    end
  58.  call close('top10')
  59. end
  60.  
  61.  
  62.  
  63.  
  64.  
  65. call message cls
  66. say ''||CR
  67. IF OPEN('top10',filename,'r') THEN
  68.    DO
  69.       DO m = 1 TO 10 UNTIL EOF('top10')
  70.          line.m = readln('top10')
  71.       END
  72.       CALL CLOSE('top10')
  73.       m = m - 1
  74.    END
  75. name = UPPER(username)
  76. call message cls
  77. say ''||CR
  78. prompt(  mag'Would you like to see the TOP TEN scores' name'?')
  79. answer=readstr()
  80.  
  81. say ''||CR
  82. if answer ~='Y' then call start
  83. if answer = 'Y' then CALL Showtop10()
  84.  
  85.  say ''||CR
  86.  prompt(  yel'Are you ready to play' name'? (Y/N)')
  87.  answer=readstr()
  88.  if answer ~='Y' then call OUT
  89.  else call start
  90.  
  91.  
  92. start:
  93. call message cls
  94. answer = random(1,1000,time(s))
  95. say wht'   ---------------------------------------------------------------------'||CR
  96. say wht'    |                                                                 |'||CR
  97. say wht'    |'red' -----=====>>>>>' wht'  N U M B E R   G U E S S E R 'red ' <<<<<=====-----'wht' |'||CR
  98. say wht'    |                                                                 |'||CR
  99. say wht'    |'yel'  Ver 2.2c -'grn' Written for Baud Bandit BBS'yel' - by Charles Johnston'wht'   |'||CR
  100. say wht'    |'mag'              CrazySoft Inc.'cyn'     Prescott,Arizona'wht'                |'||CR
  101. say wht'    |                                                                 |'||CR
  102. say wht'   ---------------------------------------------------------------------'||CR
  103. say ''||CR
  104. say yel'     I am thinking of a number between 1 and 1000....You get 10 turns!'||CR          
  105.  do number = 1 to 10 until guess = answer
  106.    CALL checkBBS()
  107.    say ''||CR
  108.    prompt(  mag'     Q=Quit'wht' OR 'red' Enter Your Guess => ')
  109.    guess=readstr()
  110.    remaining = 11 - (number+1)
  111.    if guess = 'Q' then call OUT
  112.    if answer > guess then                          
  113.    say yel'     'guess''wht' is just a little bit too'grn' LOW!....'yel''remaining''wht' turns left'||CR
  114.    else if answer < guess then                    
  115.    say yel'     'guess''wht' is just a little bit too 'mag'HIGH!...'yel''remaining''wht' turns left'||CR
  116.  end
  117.  
  118. if guess ~= answer then 
  119.   do
  120.     say ''||CR
  121.     say red'     You used all'mag' 10'red' turns!'||CR
  122.     say wht'     Better luck'yel' NEXT'wht' time!'||CR
  123.     say grn'     The'yel' correct'grn' number was'yel'' answer '!'||CR    
  124.   end
  125. else
  126.   do
  127.     say ''||CR
  128.     say wht'     You got it in'red'' number ''wht'turns!'||CR
  129.     call delay(200)
  130.  
  131.    /* Sort and add to list only if it is better than 10th score */ 
  132.    IF number < number.10 & number < 10 THEN 
  133.       DO
  134.          line.10 = number' 'name 
  135.          CALL is(1, m)
  136.          CALL Showtop10()
  137.          CALL DELETE(filename)
  138.          CALL OPEN('top10',filename,'w')
  139.          DO i = 1 TO m
  140.             CALL WRITELN('top10',line.i)
  141.          END
  142.          call close('top10')
  143.       END
  144.  
  145.   END
  146. say ''||CR
  147. prompt(  cyn'     Would you like to try again?'grn' > ')
  148. again=readstr()
  149. if again = 'Y' then call start
  150. if again ~= 'Y' then call OUT
  151. else
  152. BREAK_C:
  153. BREAK_E:
  154. exit
  155.  
  156.  
  157. checkBBS:
  158. IF ADDRESS()~='BAUD' THEN RETURN 0
  159. IF TIME('E')>secs THEN SIGNAL OUT
  160. dcd
  161. IF RC=0 THEN EXIT
  162. temp=secs-TIME('E')
  163. IF temp<120 THEN SAY '*** Only' temp 'seconds left! ***'CR
  164. RETURN 0
  165.  
  166.  
  167. /* Insertion Sort */
  168. /* line s list to be sorted, start should be 1, end is max number of lines */
  169. /* line is a compound variable from line.1 to line.end  */
  170. is:
  171.    DO i = 2 to m
  172.       x = line.i
  173.       j = i - 1
  174.       DO WHILE j > 0 & x < line.j
  175.          k = j + 1
  176.          line.k = line.j
  177.          j = j - 1
  178.       END
  179.       k = j + 1
  180.       line.k = x
  181.    END
  182. RETURN
  183.         
  184. Showtop10:
  185.   say'0C'x
  186.   say mag CENTER(' *******************************************',75)||CR
  187.   say ''||CR
  188.   say wht CENTER('        N U M B E R    G U E S S E R      ',75)||CR
  189.   say ''||CR
  190.   SAY mag CENTER(' ********** Top'yel' TEN'mag' Hall of Fame ********',75)||def||CR
  191.   say ''||CR
  192.   DO i = 1 TO m
  193.      PARSE VAR line.i number.i name.i
  194.      name.i = COPIES(' ',24)name.i
  195.      number = COPIES(' ',52)number.i
  196.      SAY''OVERLAY(name.i, number)''cr
  197.   END
  198. RETURN
  199.  
  200. message:
  201. parse arg string
  202. say string||CR
  203. return
  204.  
  205. readstr: procedure
  206. str=''
  207. out=readch(STDIN)
  208.  call WRITECH(STDOUT,out)
  209.  do while out~=D2C(13)
  210.       if out=D2C(8) then do
  211.          str=SUBSTR(str,1,LENGTH(str)-1)
  212.          call WRITECH(STDOUT,' ')
  213.          call WRITECH(STDOUT,out)
  214.          end
  215.       else
  216.          str=INSERT(str,out)
  217.       out=readch(STDIN)
  218.       call WRITECH(STDOUT,out)
  219.     end
  220. say '0D'x
  221. return(UPPER(str))
  222.  
  223. prompt: procedure
  224. parse arg str
  225. writech(STDOUT,str)
  226. return 1
  227.  
  228. out:
  229.  call message cls
  230.  say mag' Now returning to BBS.....'
  231.  exit